package tech.aistar.day06.extend;

/**
 * 本类用来演示: 多态的演示
 *
 * @author: success
 * @date: 2021/3/15 2:03 下午
 */
public class TestDogPoly {
    public static void main(String[] args) {
//        1. 对象的编译时类型可以写成父类
//        2. 对象的运行时类型可以写成子类

//        3. 对象的编译时类型决定了对象的访问能力
        //   - 对象的编译时类型中定义的成员才能够被这个变量调用

//        4. 对象的运行时类型决定了对象的行为能力.
        //   - 会调用子类重写之后的方法

        Animal dog = new Dog("哮天犬",100.0d);

        dog.spark();//调用的是子类中的

        //dog.watchDoor();

        Animal cat = new Cat("咪咪",100.0d);
        cat.spark();

        //cat的编译时类型是Animal.
        //如果此时非要用cat来访问运行时类型Cat中的特有的方法
        //可以进行强制类型转换. 父类是可以强制类型转换成子类
        Cat c = (Cat) cat;
        c.catchMouse();

        //===测试static===
        //static定义的方法允许重写,但是没有多态.
        dog.testSup();

    }
}
